<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
	<title>索引员工文档 | Elasticsearch: 权威指南 | Elastic</title>
    <!-- Give IE8 a fighting chance -->
    <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
	<link rel="stylesheet" type="text/css" href="../static/styles.css" />
</head>
<body>
<div class="main-container">
    <section id="content">
        
        <div class="content-wrapper">
            <section id="guide" lang="zh_cn">
                <div class="container">
                    <div class="row">
                        <div class="col-xs-12 col-sm-8 col-md-8 guide-section">
                            <div style="color:gray; word-break: break-all; font-size:12px;">原文地址: <a href="https://www.elastic.co/guide/cn/elasticsearch/guide/current/_indexing_employee_documents.html" rel="nofollow">https://www.elastic.co/guide/cn/elasticsearch/guide/current/_indexing_employee_documents.html</a>, 版权归 www.elastic.co 所有<br/>
                            英文版地址: <a href="https://www.elastic.co/guide/en/elasticsearch/guide/current/_indexing_employee_documents.html" rel="nofollow">https://www.elastic.co/guide/en/elasticsearch/guide/current/_indexing_employee_documents.html</a>
                            </div>
                        <!-- start body -->
                  <div class="page_header">
<b>请注意:</b><br>本书基于 Elasticsearch 2.x 版本，有些内容可能已经过时。
</div>
<div id="content">
<div class="breadcrumbs">
<span class="breadcrumb-link"><a href="index.html">Elasticsearch: 权威指南</a></span>
»
<span class="breadcrumb-link"><a href="getting-started.html">基础入门</a></span>
»
<span class="breadcrumb-link"><a href="intro.html">你知道的, 为了搜索…​</a></span>
»
<span class="breadcrumb-node">索引员工文档</span>
</div>
<div class="navheader">
<span class="prev">
<a href="_finding_your_feet.html">« 适应新环境</a>
</span>
<span class="next">
<a href="_retrieving_a_document.html">检索文档 »</a>
</span>
</div>
<div class="section">
<div class="titlepage"><div><div>
<h2 class="title">
<a id="_indexing_employee_documents"></a>索引员工文档<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elasticsearch-cn/elasticsearch-definitive-guide/edit/cn/010_Intro/25_Tutorial_Indexing.asciidoc">edit</a>
</h2>
</div></div></div>
<p>第一个业务需求是存储员工数据。 这将会以 <em>员工文档</em> 的形式存储：一个文档代表一个员工。存储数据到 Elasticsearch 的行为叫做 <em>索引(indexing)</em> ，但在索引一个文档之前，需要确定将文档存储在<em>哪里</em>。</p>

<p>一个 Elasticsearch 集群可以 包含多个 <em>索引(indices)</em> ，相应的每个索引可以包含多个 <em>类型</em> 。 这些不同的类型存储着多个 <em>文档</em> ，每个文档又有  多个 <em>属性</em> 。</p>
<div class="sidebar">
<div class="titlepage"><div><div>
<p class="title"><strong>索引 与 索引 与 索引</strong></p>
</div></div></div>
<p>你也许已经注意到 <em>索引(index)</em> 这个词在 Elasticsearch 语境中有多种含义，  这里有必要做一些说明：</p>
<p>索引（名词）：</p>
<p>如前所述，一个 <em>索引</em> 类似于传统关系数据库中的一个 <em>数据库</em> ，是一个存储关系型文档的地方。 <em>索引</em> (<em>index</em>) 的复数形式为 <em>indices</em> 或 <em>indexes</em> 。</p>

<p>索引（动词）：</p>
<p><em>索引一个文档</em> 就是存储一个文档到一个 <em>索引(名词)</em> 中以便被检索和查询。这非常类似于 SQL 语句中的 <code class="literal">INSERT</code> 关键词，除文档已存在时，新文档会替换旧文档情况之外。</p>

<p>倒排索引 (Inverted index)</p>
<p>关系型数据库通过增加一个 <em>索引</em>(比如一个 B-tree 索引)到指定的列上，以便提升数据检索速度。Elasticsearch 和 Lucene 使用了一个叫做 <em>倒排索引(inverted index)</em> 的结构来达到相同的目的。</p>
<p>
默认情况下，一个文档中的每一个字段都是 <em>被索引(indexed)</em> 的（有一个倒排索引），因此可以搜索。一个没有倒排索引的字段是不能被搜索的。我们将在<a class="xref" href="inverted-index.html" title="倒排索引">倒排索引</a>中讨论倒排索引的更多细节。</p>
</div>
<p>对于员工目录，我们将做如下操作：</p>
<div class="ulist itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
每个员工索引一个<em>文档</em>，包含该员工的所有信息。
</li>
<li class="listitem">
每个文档都将是 <code class="literal">employee</code> <em>类型</em> 。
</li>
<li class="listitem">
该类型位于 <em>索引</em> <code class="word">megacorp</code> 内。
</li>
<li class="listitem">
该索引保存在我们的 Elasticsearch 集群中。
</li>
</ul>
</div>
<p>实践中这非常简单（尽管看起来有很多步骤），我们可以通过一条命令完成所有这些动作：</p>
<div class="pre_wrapper lang-sense">
<pre class="programlisting prettyprint lang-sense">PUT /megacorp/employee/1
{
    "first_name" : "John",
    "last_name" :  "Smith",
    "age" :        25,
    "about" :      "I love to go rock climbing",
    "interests": [ "sports", "music" ]
}</pre>
</div>
<div class="sense_widget" data-snippet="snippets/010_Intro/25_Index.json"></div>
<p>注意，路径 <code class="word">/megacorp/employee/1</code> 包含了三部分的信息：</p>
<div class="variablelist">
<dl class="variablelist">
<dt>
<span class="term">
<code class="literal">megacorp</code>
</span>
</dt>
<dd>
索引名称
</dd>
<dt>
<span class="term">
<code class="literal">employee</code>
</span>
</dt>
<dd>
类型名称
</dd>
<dt>
<span class="term">
<code class="literal">1</code>
</span>
</dt>
<dd>
特定雇员的ID
</dd>
</dl>
</div>
<p>请求体 — JSON 文档 — 包含了这位员工的所有详细信息，他的名字叫 John Smith ，今年 25 岁，喜欢攀岩。</p>

<p>很简单！无需首先执行任何管理任务，比如创建一个索引或指定每个字段的数据类型之类的。可以直接索引一个文档。Elasticsearch 附带了所有默认值，因此所有必需的管理任务都在后台使用默认设置完成。</p>
<p>进行下一步之前，让我们增加更多的员工信息到目录中：</p>
<div class="pre_wrapper lang-sense">
<pre class="programlisting prettyprint lang-sense">PUT /megacorp/employee/2
{
    "first_name" :  "Jane",
    "last_name" :   "Smith",
    "age" :         32,
    "about" :       "I like to collect rock albums",
    "interests":  [ "music" ]
}

PUT /megacorp/employee/3
{
    "first_name" :  "Douglas",
    "last_name" :   "Fir",
    "age" :         35,
    "about":        "I like to build cabinets",
    "interests":  [ "forestry" ]
}</pre>
</div>
<div class="sense_widget" data-snippet="snippets/010_Intro/25_Index.json"></div>
</div>
<div class="navfooter">
<span class="prev">
<a href="_finding_your_feet.html">« 适应新环境</a>
</span>
<span class="next">
<a href="_retrieving_a_document.html">检索文档 »</a>
</span>
</div>
</div>

                  <!-- end body -->
                        </div>
                        <div class="col-xs-12 col-sm-4 col-md-4" id="right_col">
                        
                        </div>
                    </div>
                </div>
            </section>
        </div>
    </section>
</div>
<script src="../static/cn.js"></script>
</body>
</html>